Operational Transformation

分散環境で複数のユーザーが同時に行った操作を、互いの操作を考慮して変換・調整することで競合を解決するアルゴリズム。Google Docsなどが採用している。

基本的な仕組み

複数ユーザーの操作が異なる順序でサーバーに到達した場合、後から到達した操作を「先に適用された操作を踏まえて変換」してから適用する。

User Aの操作: insert(5, " World")   → "Hello World"
User Bの操作: replace(0, 4, "Hi")  → "Hi"

同時に発生した場合:
→ サーバーがUser Aの操作を変換
→ insert(2, " World") として適用
→ 最終結果: "Hi World"

特徴

CRDTとの比較

CRDT(Conflict-free Replicated Data Type)は、サーバーレスでも競合が起きないことを数学的に保証するアプローチで、OTの課題を解決するために考案された。

項目 OT CRDT
中央サーバー 必要 不要
複雑さの所在 変換ロジック データ構造
オフライン対応 難しい 対応しやすい
代表的な採用 Google Docs Figma, Yjs

関連